package ar.com.seminario.model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import ar.com.seminario.common.domain.entity.Identifiable;
import ar.com.seminario.model.enumerados.EstadoPropuesta;

/**
 * Detalla una propuesta de ingreso.
 * 
 * @author Pablo Lamas
 * 
 */
@Entity
@Table(name = "propuesta_ingreso")
public class PropuestaIngreso implements Identifiable<Long> {

	/**
	 * Identificador de la entidad.
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id", nullable = false)
	private Long id;

	/**
	 * Estado en que se encuentra la propuesta.
	 */
	@Column(name = "estado_propuesta_id", nullable = true)
	private Long estadoPropuestaId;

	/**
	 * Define una escala comparable.
	 */
	@Column(name = "escalas_comparables", nullable = true)
	private String escalasComparables;

	/**
	 * La remuneracion ofrecida en la propuesta.
	 */
	@Column(name = "remuneracion_ofrecida", nullable = true)
	private Float remuneracionOfrecida;

	/**
	 * La fecha de ingreso estimada.
	 */
	@Column(name = "fecha_estimada_ingreso", nullable = true)
	private Date fechaEstimadaIngreso;

	/**
	 * Observaciones registradas sobre la propuesta realizada.
	 */
	@Column(name = "observaciones", nullable = true)
	private String observaciones;

	/**
	 * Referencia al candidato al que se le hizo la propuesta.
	 */
	@OneToOne
	@JoinColumn(name = "candidato_id", nullable = false)
	private Candidato candidato;

	/**
	 * Constructor por defecto.
	 */
	public PropuestaIngreso() {

	}

	public Long getId() {
		return id;
	}

	protected void setId(Long id) {
		this.id = id;
	}

	public EstadoPropuesta getEstadoPropuesta() {
		return EstadoPropuesta.fromId(estadoPropuestaId);
	}

	public void setEstadoPropuesta(EstadoPropuesta estadoPropuesta) {

		if (estadoPropuesta != null) {
			this.estadoPropuestaId = estadoPropuesta.getId();
		} else {
			this.estadoPropuestaId = null;
		}
	}

	public String getEscalasComparables() {
		return escalasComparables;
	}

	public void setEscalasComparables(String escalasComparables) {
		this.escalasComparables = escalasComparables;
	}

	public Float getRemuneracionOfrecida() {
		return remuneracionOfrecida;
	}

	public void setRemuneracionOfrecida(Float remuneracionOfrecida) {
		this.remuneracionOfrecida = remuneracionOfrecida;
	}

	public Date getFechaEstimadaIngreso() {
		return fechaEstimadaIngreso;
	}

	public void setFechaEstimadaIngreso(Date fechaEstimadaIngreso) {
		this.fechaEstimadaIngreso = fechaEstimadaIngreso;
	}

	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	public Candidato getCandidato() {
		return candidato;
	}

	public void setCandidato(Candidato candidato) {
		this.candidato = candidato;
	}
}
